###[view/StudentList.py]
from PySide6.QtWidgets import QVBoxLayout, QGroupBox, QButtonGroup, QScrollArea, QWidget
from PySide6.QtCore import Qt, Slot

class StudentList(QVBoxLayout):  # 改为继承QVBoxLayout
    """学生列表组件（基于垂直布局）"""
    def __init__(self, max_height=400):
        super().__init__()
        # 1. 最外层容器：QGroupBox（带边框和标题）
        self._container = QGroupBox("学生列表")
        # 2. 创建滚动区域作为GroupBox的子控件
        self.scroll = QScrollArea()
        self.scroll.setWidgetResizable(True)
        self.scroll.setFixedHeight(max_height)
        self._container.setLayout(QVBoxLayout())  # GroupBox用简单布局包裹ScrollArea
        self._container.layout().addWidget(self.scroll)
        # 3. 滚动区域的内容部件（承载QVBoxLayout）
        self.content = QWidget()
        self.scroll.setWidget(self.content)
        self.content.setLayout(self)  # 将自身(QVBoxLayout)设为内容部件的布局
        # 4. 对齐配置
        self.setAlignment(Qt.AlignmentFlag.AlignHCenter)
        
    @Slot()
    def reload_buttons(self, btn_group: QButtonGroup):
        """重新加载按钮（自动处理伸缩空间）"""
        # 1. 移除现有所有组件（包括按钮和伸缩空间）
        while self.count():
            item = self.takeAt(0)  # 从布局中取出第一个元素
            if item.widget():
                item.widget().setParent(None)  # 如果是控件则解除父子关系
        # 2. 添加所有按钮
        for btn in btn_group.buttons():
            self.addWidget(btn)
        # 3. 最后添加新的伸缩空间
        self.addStretch()
